public class Main{
    public static void main1(String[] args) {
        //运算符
        int a = 10;
        int b = 20;
        float f = 200.0f;

        //两侧操作数类型不一致时，向类型大的提升
        System.out.println(a + b);
        System.out.println(a - b);
        System.out.println(f - a);
        System.out.println(b / a);
        System.out.println(f / a);
    }

    public static void main2(String[] args) {
        //增量运算符 += -= *= %=

        int a = 10;
        int b = 20;
        int sum = 20;
        System.out.println(sum += a);;
        System.out.println(sum -= a);
        System.out.println(sum *= a);
        System.out.println(sum %= a);
    }

    //自增/自减运算符 ++ --
    public static void main3(String[] args) {
        int a = 3;
        int b = 2;
        int c = 4;
        int d = 5;
        System.out.println(++a);
        System.out.println(b++);
        System.out.println(--c);
        System.out.println(d--);
    }

    //关系运算符主要有六个: == != < > <= >=
    public static void main4(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println(a == b);
        System.out.println(a != b);
        System.out.println(a < b);
        System.out.println(a > b);
        System.out.println(a <= b);
        System.out.println(a >= b);
    }

    //逻辑运算符
    public static void main5(String[] args) {
        int a = 1;
        int b = 2;

        //1.逻辑与&&  全为真，整体才为真
        System.out.println(a ==1 && b == 2);
        System.out.println(a ==2 && b == 1);
        System.out.println(a ==1 && b == 3);
        System.out.println(a ==2 && b == 2);

        System.out.println("-----------------");
        //2.逻辑或|| 任意条件为真，整体为真
        System.out.println(a ==1 || b == 2);
        System.out.println(a ==2 || b == 1);
        System.out.println(a ==1 || b == 3);
        System.out.println(a ==2 ||b == 2);

        System.out.println("-----------------");
        //3.逻辑非 !  真变假，假变真。
        System.out.println(!(a == 1));
        System.out.println(!(a == 2));
    }

    //短路求值
    //对于 && , 如果左侧表达式值为 false, 则表达式结果一定是 false, 无需计算右侧表达式.
    //对于 ||, 如果左侧表达式值为 true, 则表达式结果一定是 true, 无需计算右侧表达式.
    public static void main6(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println(a == 5 && b == 20);
        System.out.println(a == 10 || b == 10);
    }

    //条件运算符只有一个:
    //表达式1 ? 表达式2 : 表达式3
    //当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值;
    //当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值.
    public static void main7(String[] args) {
        int a = 10;
        int b = 20;
        int c = a > b ? a : b;
        System.out.println(c);
    }

    //移位运算
    //1. 左移 <<: 最左侧位不要了, 最右侧补 0
    //2. 右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)
    //3. 无符号右移 >>>: 最右侧位不要了, 最左侧补 0.
    //注意:
    //1. 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.
    //2. 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.
    //3. 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替.
    //4. 移动负数位或者移位位数过大都没有意义.
}